public class 两数相除 {
    public static void main(String[] args) {
        System.out.println(divide(14, 3));
    }
    public static int divide(int dividend, int divisor) {
        //判断除数是否为最小值和被除数是否为-1
        if(dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MIN_VALUE;
        int sign = (dividend > 0) ^ (divisor > 0) ? -1 : 1;
        int dd = dividend;
        int ds = divisor;
        //将所有的数据转换成正数,
        if (dd < 0) dd = -dd;
        if (ds < 0) ds = -ds;
        int res = 0;
        for (int i = 5; i >= 0; i--) {
            //1.if(dd < ds << i):ds<<i可能会造成ds大于了最大值，所以更改为dd >> i位,
            //2.Math.abs(Integer.MIN_VALUE) 和 -Integer.MIN_VALUE 都是Integer.MIN_VALUE；
            // 所以对被除数要进行无符号移动 >>>
            int k = (dd >>> i) - ds;
            if(  k >= 0 ) {
                dd = dd - (ds << i);
                res = res + (1 << i);
            }
        }
        return res * sign;
    }
}
